package com.fangyi.yunmusic.interceptor;

import com.fangyi.yunmusic.utils.JsonResult;
import com.google.common.cache.LoadingCache;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 用户行为拦截器，保证只有 用户本身 才能 对其歌单专辑等资源 进行增删改。
 */
public class UserOpInterceptor extends BaseInterceptor{

    @Autowired
    @Qualifier("userTokenCache")
    private LoadingCache<String, String> userTokenCache;

    /**
     * 拦截请求，在controller调用之前
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 从请求中得到userId
        String userId = request.getParameter("userId");
        // 若userId没有，放行，交给controller处理
        if (userId == null) {
            return true;
        }
        String cacheUserToken = userTokenCache.getIfPresent(userId);
        if (cacheUserToken == null) {
            returnErrorResponse(response, JsonResult.errorTokenMsg("token为空"));
            return false;
        }
        // 从请求头中得到userToken
        String userToken = request.getHeader("userToken");
        // 判断传过来的token是否为userId在缓存中对应的token
        if (!userToken.equals(cacheUserToken)) {
            returnErrorResponse(response, JsonResult.errorTokenMsg("无权限"));
            return false;   // 不是，则无权限
        }
        // 是，则放行
        return true;
    }

}
